In [1]:
using PlotlyJS
PlotlyJS.init_notebook(true);

Plotly javascript loaded.

To load again call

init_notebook(true)

INFO: Loading HttpServer methods...
In [2]:
include("visual_profiler.jl")
Out[2]:
profiler_plot (generic function with 1 method)

Profiling plot

Each rectangle is a task. Mouse over the center for information on the task.

Format of hover text: task name, e = elapsed time, t = start time

thread id -1: master task from main(); it generates seed tasks but otherwise does not participate in the computation

Color scheme: white = wait; grey = scheduler overhead; color = user task

Markers = special events

Format of hover text: event type, t = start time

spawn_to: task inserted in ready queue of a thread

spawn_other: task inserted in ready queue of an idle thread which is different from the assigned thread; thread ids are shown in the hover text

steal: idle thread took a task from the ready queue of another thread

The space between rectangles corresponds to the profiler overhead.

The white rectangles correspond to periods where a thread's queue is empty. In that case, the thread sleeps for x microseconds, with e.g., x = 40.

Note that the OS may decide to suspend a thread at any time in order to run other threads. As a result, the duration of tasks can be highly variable.

In [3]:
ev, tmin, tmax, n_event = read_profile_log("team_sp0.out")
build_profile_plot(ev, 1024)
Out[3]:
In [4]:
ev, tmin, tmax, n_event = read_profile_log("team_sp_all.out")
build_profile_plot(ev, 1024)
Out[4]:
In [5]:
ev, tmin, tmax, n_event = read_profile_log("ring.out")
build_profile_plot(ev, 1024)
Out[5]:
In [6]:
ev, tmin, tmax, n_event = read_profile_log("ring4096.out")
build_profile_plot(ev, 1024)
Out[6]:
In [7]:
ev, tmin, tmax, n_event = read_profile_log("ring64.out")
build_profile_plot(ev, 1024)
Out[7]:
In [8]:
ev, tmin, tmax, n_event = read_profile_log("ring2.out")
build_profile_plot(ev, 1024)
Out[8]:
In [9]:
ev, tmin, tmax, n_event = read_profile_log("ring1.out")
build_profile_plot(ev, 1024)
Out[9]:
In [10]:
ev, tmin, tmax, n_event = read_profile_log("gemm.out")
build_profile_plot(ev, 1024)
Out[10]:
In [11]:
ev, tmin, tmax, n_event = read_profile_log("gemm_w_init.out")
build_profile_plot(ev, 1024)
Out[11]: